package Day_0216.JVM.ClassLoader;

/**
 * @author zxc
 * @date 2023/02/16 20:00
 **/
public class Class_Loader {
    public static void main(String[] args) {
        /**
         * 什么是类加载器 && 类加载器的类型
         * ===》
         * 1.实现通过类的权限定名，获取该类的二进制字节流的代码块，叫做类加载器。
         *
         * 2.主要有一下四种类加载器:
         * （1）启动类加载器(Bootstrap ClassLoader) ：
         *  用来加载java核心类库，无法被java程序直接引用。
         * （2）扩展类加载器(extensions class loader) ：
         *  用来加载 Java 的扩展库。
         *  Java 虚拟机的实现，会提供一个扩展库目录。
         *  该类加载器在此目录里面查找并加载 Java 类。
         * （3）系统类加载器（system class loader）：
         *  根据 Java 应用的类路径（CLASSPATH）来加载 Java类。
         *  一般来说，Java 应用的类都是由它来完成加载的。可以通过ClassLoader.getSystemClassLoader()来获取它。
         * （4）用户自定义类加载器 ：
         *  通过继承 java.lang.ClassLoader类的方式实现。
         *
         */

        /**
         * 谈一谈对于类装载过程的理解
         * ===》
         * 类装载分为以下 5 个步骤：
         * （1）加载：根据查找路径，找到相应的 class 文件，然后导入;
         * （2）验证：检查加载的 class 文件的正确性;
         * （3）准备：给类中的静态变量，分配内存空间;
         * （4）解析：虚拟机将常量池中的符号引用替换成直接引用的过程;
         *  符号引用就理解为一个标示，而在直接引用直接指向内存中的地址;
         * （5）初始化：对静态变量和静态代码块，执行初始化工作;
         *
         */
    }
}
